package com.spring.main;

import com.spring.dao.AccountDao;
import com.spring.service.AccountService;
import com.spring.service.impl.AccountServiceImpl;
import javafx.application.Application;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;


import java.util.logging.XMLFormatter;

public class Client {

    /**
     * 获取spring的IOC容器,并根据id获取对象
     * ApplicationContext的三个常用实现类
     * ClassPathXmlApplicationContext 他可以加载类路径下的配置文件，要求诶之问价您必须在类路径下，不在的话，加载不了
     * FileSystemXmlApplicationContext 它可以加载磁盘任意路径下的配置文件（必须有访问权限）
     * AnnotationConfigApplicationContext
     *
     * 核心容器的两个接口引发的问题：
     *  ApplicationContext: 单利对象适用
     *      它在构建核心容器时，创建对象采取的策略是采用立即加载的方式。也就是说：只要一读取完配置文件马上就创建配置文件中配置的对象。
     *  BeanFactory:        多例对象适用
     *      他在构建核心容器时，创建对象采用的策略是采用延迟加载的方式。也就是说什么时候id获取对象了，什么时候才真正的创建对象。
     */
    public static void main(String[] args) {


        // 获取核心容器对象
/*        ApplicationContext ac = new ClassPathXmlApplicationContext("aaa.xml");*/


        //根据id获取bean
/*        AccountService accountService = (AccountService) ac.getBean("accountService");
        AccountDao accountDao = ac.getBean("accountDao", AccountDao.class);

        System.out.println(accountService);
        System.out.println(accountDao);*/

/*        Resource resource = new ClassPathResource("bean.xml");
        BeanFactory beanFactory = new XmlBeanFactory(resource);
        AccountService bean = (AccountService)beanFactory.getBean("accountService");
        System.out.println(bean);*/

    }
}
